package cn.dyp.com.getnotification.util;


import android.content.Context;
import android.os.Handler;
import android.os.Message;

import cn.dyp.com.getnotification.ClientApp;

/**
 * 通知获取的线程类
 * 
 * @author asus
 *
 */
public class GetNotifiThread extends Thread {
	// 消息id,请求完成以后，需要将此id发送给ui主线程处理
	public static final int MSG_NOTIFI_RESULT = 0x10;
	// ui主线程的Handler
	private Handler mHandler;
	// app上下文
	private Context mContext;
	// app对象
	private ClientApp mApp;
	// 线程是否已经被取消的控制变量
	private volatile boolean mCancel = false;
	// 循环执行的时间间隔
	private volatile int mLoopPeriod = 5000;// 默认为5秒

	/**
	 * 构造函数
	 * 
	 * @param context
	 *            上下文对象
	 * @param handler
	 *            Handler
	 */
	public GetNotifiThread(Context context, Handler handler) {
		mContext = context;
		mHandler = handler;
		mApp = (ClientApp) context.getApplicationContext();
	}

	/**
	 * 停止请求线程
	 * 
	 */
	public void stopThread() {
		mCancel = true;
	}

	/**
	 * 判断线程是否已经停止
	 * 
	 * @return 线程是否停止
	 */
	public boolean isCancel() {
		return mCancel;
	}

	@Override
	public void run() {
		super.run();
		do {
			String notifiStr = "";
			// 先判断网络状态
			if (NetUtil.isNetworkAvailable(mContext)) {
				notifiStr = NetUtil.sendData(8892, "getNotification",mApp);
			}

			if (!notifiStr.equals("")) {
				// 请求完成以后，将此结果发送给service处理
				if (!mCancel && mHandler != null) {
					Message msg = new Message();
					msg.what = MSG_NOTIFI_RESULT;
					msg.obj = notifiStr;
					mHandler.sendMessage(msg);
				}
			}

			// 循环执行线程，延时
			try {
				Thread.sleep(mLoopPeriod);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		} while (!mCancel);
	}

	/**
	 * 设置线程循环周期
	 * 
	 * @param loopPeriod
	 */
	public void setLoopPeriod(int loopPeriod) {
		this.mLoopPeriod = loopPeriod;
	}
}
